package com.wlz.thread.ForkJoin;

import lombok.extern.slf4j.Slf4j;

import java.util.*;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

/**
 * @author wlz
 * @date 2023-05-10  14:17
 */
@Slf4j
public class ForkJoinTest2 {

    public static void main(String[] args) {

        List<FileTaskPackageEntity> fileTaskPackageList = doTestList();
        Map<String, List<FileTaskPackageEntity>> collect = fileTaskPackageList.stream().collect(Collectors.groupingBy(FileTaskPackageEntity::getTaskPackageId));
        ForkJoinPool pool = new ForkJoinPool(8);
        AtomicInteger flag = new AtomicInteger(0);
        ForkJoinTask<?> submit = pool.submit(() -> {
            collect.entrySet().parallelStream().forEach(f -> {
                String taskPackageId = f.getKey();
                Random random = new Random();
                try {
                    Thread.sleep(random.nextInt(10000));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.info("thread:" + Thread.currentThread().getName() + "packageTaskId" + taskPackageId + "time = " + new Date());
                List<FileTaskPackageEntity> list = f.getValue();
                if (list.size() >= 2) {
                    flag.incrementAndGet();
                    log.info("thread:" + Thread.currentThread().getName() + "packageTaskId" + taskPackageId + "time = " + new Date() + "加 = " + flag.get());
                }
            });
        });
        try {
            submit.get();
        } catch (Exception e) {
            log.error("错误信息为：", e);
        }
        System.out.println("end .......");
        if (flag.get() == collect.size()) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }

    }

    public static List<FileTaskPackageEntity> doTestList() {
        List<FileTaskPackageEntity> list = new ArrayList<>();
        String taskPackageId = "efb2f1e9-af4a-444e-895f-73ac56293096";
        for (int i = 0;i <= 17; i ++) {
            if (i%2 == 0) {
                taskPackageId = UUID.randomUUID().toString();
            }
            FileTaskPackageEntity fileTaskPackageEntity = new FileTaskPackageEntity();
            fileTaskPackageEntity.setTaskPackageId(taskPackageId);
            fileTaskPackageEntity.setTaskId("c8e6ea87-6eb6-427f-8a22-c7bd163499c0");
            fileTaskPackageEntity.setTaskPackageType(0);
            fileTaskPackageEntity.setUpgradeMode("1");
            fileTaskPackageEntity.setOrderNo(1);
            fileTaskPackageEntity.setPackageControllerType(0);
            fileTaskPackageEntity.setPartName("TPM");
            fileTaskPackageEntity.setCarTypeName("N60AB");
            fileTaskPackageEntity.setPartNumber("E00111155");
            fileTaskPackageEntity.setSoftwareVersion("S051001");
            fileTaskPackageEntity.setIsCalibration("0");
            fileTaskPackageEntity.setBrushWriteMode("0");
            fileTaskPackageEntity.setPartGroupName("A");
            fileTaskPackageEntity.setBaudRate("11");
            fileTaskPackageEntity.setPhysicalId("7C1");
            fileTaskPackageEntity.setFunctionalId("7DF");
            fileTaskPackageEntity.setResponseId("7C9");
            fileTaskPackageEntity.setFileNewName("TPME00111155S051001N61AB.zip");
            fileTaskPackageEntity.setFileSuffix("zip");
            fileTaskPackageEntity.setFileSize("32321");
            fileTaskPackageEntity.setFullPath("D:\\home\\intest\\fota\\share\\controller-file\\ea478714-d4f4-4853-97b4-4efafdbdfce2\\TPM台架模拟10\\TPME00111155S051001N61AB.zip");
            list.add(fileTaskPackageEntity);
        }

        FileTaskPackageEntity fileTaskPackageEntity = new FileTaskPackageEntity();
        fileTaskPackageEntity.setTaskPackageId(taskPackageId);
        fileTaskPackageEntity.setTaskId("c8e6ea87-6eb6-427f-8a22-c7bd163499c0");
        fileTaskPackageEntity.setTaskPackageType(0);
        fileTaskPackageEntity.setUpgradeMode("1");
        fileTaskPackageEntity.setOrderNo(1);
        fileTaskPackageEntity.setPackageControllerType(0);
        fileTaskPackageEntity.setPartName("TPM");
        fileTaskPackageEntity.setCarTypeName("N60AB");
        fileTaskPackageEntity.setPartNumber("E00111155");
        fileTaskPackageEntity.setSoftwareVersion("S051001");
        fileTaskPackageEntity.setIsCalibration("0");
        fileTaskPackageEntity.setBrushWriteMode("0");
        fileTaskPackageEntity.setPartGroupName("A");
        fileTaskPackageEntity.setBaudRate("11");
        fileTaskPackageEntity.setPhysicalId("7C1");
        fileTaskPackageEntity.setFunctionalId("7DF");
        fileTaskPackageEntity.setResponseId("7C9");
        fileTaskPackageEntity.setFileNewName("TPME00111155S051001N61AB.zip");
        fileTaskPackageEntity.setFileSuffix("zip");
        fileTaskPackageEntity.setFileSize("32321");
        fileTaskPackageEntity.setFullPath("D:\\home\\intest\\fota\\share\\controller-file\\ea478714-d4f4-4853-97b4-4efafdbdfce2\\TPM台架模拟10\\TPME00111155S051001N61AB.zip");
        list.add(fileTaskPackageEntity);
        return list;
    }
}
